#pragma once

namespace WiiCIS {
	namespace IO {
		class Root;

		class Device {
		private:
			Root *root;

			bool rumble;
			byte leds;

			byte *currentEventBuffer;
			byte *previousEventBuffer;
			
			void SendData(CommandType commandType, byte *message, int length);

		public:
			WIICISIO_EXPORT Device();
			WIICISIO_EXPORT ~Device();

			WIICISIO_EXPORT bool isConnected();
			WIICISIO_EXPORT void Connect();
			WIICISIO_EXPORT void Disconnect();

			bool getRumble() const { return rumble; }
			byte getLeds() const  { return leds; }

			WIICISIO_EXPORT void setRumble(bool value);
			WIICISIO_EXPORT void setLeds(byte value);
			WIICISIO_EXPORT void setReportType(ReportType reportType);
		
			WIICISIO_EXPORT byte *Read();
		};
	}
}